package com.co.notaweb.bussines;

import java.util.List;

import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.co.notaweb.entities.Estudiante;

/**
 * @author PC
 * @version 1.0
 * @created 13-nov-2011 12:14:25
 */
@Stateless
@TransactionAttribute(TransactionAttributeType.MANDATORY)
public class EstudianteBussines implements IEstudianteBussinesLocal {
	@PersistenceContext(unitName = "notaweb")
	private EntityManager em;

	public EstudianteBussines() {

	}

	/**
	 * 
	 * @param curso
	 * @param docente
	 * @param materia
	 */
	public List<Estudiante> consultarEstudiantesPorCursoMateriaDocente(
			long idCurso, long idMateria, long idDocente) {

		return em.createNamedQuery("Estudiante.allEstudiantesByCursoMateria")
				.setParameter("idCurso", idCurso)
				.setParameter("idDocente", idDocente)
				.setParameter("idMateria", idMateria).getResultList();

	}

	/**
	 * 
	 * @param estudiante
	 */
	public void create(Estudiante estudiante) {
		em.persist(estudiante);
	}

	/**
	 * 
	 * @param estudiante
	 */
	public void delete(Estudiante estudiante) {
		em.remove(em.find(estudiante.getClass(), estudiante.getId()));
	}

	/**
	 * 
	 * @param estudiante
	 */
	public void edit(Estudiante estudiante) {
		em.merge(estudiante);

	}

	/**
	 * 
	 * @param id
	 */
	public Estudiante find(long id) {
		return em.find(Estudiante.class, id);
	}

	public List<Estudiante> consultarEstudiantesPorCurso(long idCurso) {
		return em.createNamedQuery("Estudiante.consultarEstudiantesPorCurso")
				.setParameter("idCurso", idCurso).getResultList();
	}

	public List<Estudiante> consultarEstudiantesPorIds(List<Long> idsCurso) {
		if (idsCurso != null && idsCurso.isEmpty()) {
			idsCurso.add(0L);
		}
		return em.createNamedQuery("Estudiante.consultarEstudiantesPorIds")
				.setParameter("idsCurso", idsCurso).getResultList();
	}

	public List<Estudiante> consultarEstudiantesPorNotIds(List<Long> idsCurso) {
		if (idsCurso != null && idsCurso.isEmpty()) {
			idsCurso.add(0L);
		}
		return em.createNamedQuery("Estudiante.consultarEstudiantesPorNotIds")
				.setParameter("idsCurso", idsCurso).getResultList();
	}

}